home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
hard
/
drivr
/
IOBlix12Usr377.lha
/
Goodies
/
NSDPatch
/
NSDPatch.cfg
< prev
next >
Wrap
Text File
|
1998-10-30
|
24KB
|
484 lines
#
# $Id: NSDPatch.cfg 1.27 1998/04/27 22:49:13 heinz Exp $
# $VER: NSDPatch.cfg 43.7 (20.4.98)
#
# Demonstration patch configuration file for NSDPatch
# ===================================================
#
#
# Each device patch configuration must reside on a single line.
# A patch that has been installed once cannot be changed.
# The patching process works also for devices which generate a
# new device base for each OpenDevice() call. It is not Unit
# specific. For devices generating multiple bases per OpenDevice(),
# existing opens won't be patched as they can't be located.
# Once a patch is installed any Unit opened since then will be
# patched.
#
# NOTE WELL: A device patch is not meant to replace an NSD upgrade
# forever. It will emulate NSD device behaviour on top
# of existing devices fairly well. It will not add any
# major safety checks or automagically fix every problem
# you might have with an old Exec device. It may not
# implement every single NSD detail for various device
# types.
#
# THERE IS ABSOLUTELY NO WARRANTY WHATSOEVER! STANDARD DISCLAIMER!
#
# How to install the patch:
#
# 1. Copy the configuration file and NSDPatch onto your boot
# partition. You can choose the place arbitrarily, though DEVS:
# and C: are recommended respectively.
#
# 2. If needed, rename the configuration file and change it as
# needed for your setup. Check the option descriptions below.
# BE CAREFUL WHEN CHOOSING PATCH OPTIONS!
#
# 3. Add a line like this one *immediately* after SetPatch to your
# S:Startup-Sequence:
#
# <location>NSDPatch QUIET PCF <configfile>
#
# You only need to specify "PCF <configfile>" if you don't use
# DEVS:NSDPatch.cfg
#
# 4. On every subsequent reboot, the NSDPatch will silently be
# turned on according to the configuration. There is nothing
# more you have to do except turning off the patch for any device
# that gets updated to be NSD compliant.
#
# There are various options, parsed in dos.library/ReadArgs() style.
# This file describes the options available with NSDPatch >=43.16.
#
# DEVICE The name of the device to patch (need not be resident)
# If your device supports NSD already, it usually is
# *NOT* wise to patch it!
# You can check this with NSDQuery
# COMMANDS A comma separated list of the supported command
# numbers. It is not necessary to specify the general
# NSD commands like NSCMD_DEVICEQUERY.
# When specifying commands, you can exclude some with
# a subsequent negative specification as shown below
# in the various patch lines.
# Just use the "!" character to specify a command number
# or range to be subsequently excluded again.
# (Needs "DEVICE" option)
# DEVICETYPE The numeric or symbolic NSD device type to set
# (Needs "COMMANDS" option)
# SKIPMOUNT/S After a trackdisk like device is patched, NSDPatch
# automagically checks if any 64 bit partitions are mounted
# but not yet activated. These partitions will then be
# activated to support, e.g., the V43 FastFileSystem
# which will activate only for big partitions
# if the underlying device supports the NSD 64 bit
# command set.
# To suppress this feature, specify this option.
# Normally, you should not use this option.
# (Needs "DEVICETYPE" option)
# IOERRNOCMD/S If the device to patch does not support IOERR_NOCMD
# correctly, i.e., if it crashes on unknown commands,
# specify this option. Only the commands specified
# via the "COMMANDS" option will be accepted then.
# All other requests will be safely returned with the
# IOERR_NOCMD error.
# (Needs "DEVICETYPE" option)
# TD64/S If the device to be patched supports the TD64 command
# set, use this option. The NSD trackdisk extensions will
# automatically be redirected then to make use of that
# functionality for e.g. the V43 FastFileSystem.
# Otherwise a simple HD_SCSICMD fallback is implemented
# for trackdisk like devices. This fallback is _very_
# simple to emulate 64 bit commands. Don't expect magic.
# (Needs "DEVICETYPE" option)
# ACTIVATE A DOS pattern to tell which DOS device names should
# be activated to e.g. start up a filesystem on a
# patched device. It is safe to specify already
# active devices. Devices where the name is "hidden"
# by a volume of the same name currently won't be
# activated. You may want to specify the partition
# names of partitions exceeding the 4GB barrier here
# for a patched device with the V43 FastFileSystem
# if you have used the SKIPMOUNT option when patching
# the device. Don't specify a trailing ':' in the
# pattern.
# RDBUNIT/N If you have a trackdisk like boot device that
# crashes on unknown commands instead of returning
# IOERR_NOCMD, you will need this option,
# "IOERRNOCMD", and "ACTIVATE". You can't boot from a
# partition exceeding the 4GB barrier with an old
# style device and the V43 FastFileSystem, and you
# must not mark any partitions exceeding that barrier
# as automountable if you have a device that does not
# support IOERR_NOCMD. These partitions won't be
# activated automatically by e.g. V43 FFS until the
# patch is installed. To activate or mount these
# partitions automatically after the patch is in
# place, specify the device unit number to scan here
# and the partition names with the "ACTIVATE" option.
# The Rigid Disk Block (RDB) on the named unit will be
# scanned and all named partitions will be mounted.
# If you specify partitions that are already
# mounted, an error will be returned. Actually, this
# option is useful as a general "late mount"
# functionality!
# MOUNTANY/S This option is obsolete. Late mounting will always
# look at all RDB entries on "RDBUNIT" matching the
# "ACTIVATE" pattern, starting with NSDPatch 43.18.
# VERSION/N If you know the exact version of a certain device to
# REVISION/N be patched, specify these options. The patch line
# will only be used if this version and revision
# can be found. As NSDPatch will not skip configuration
# lines for already patched devices, you can make a list
# of certain patches for specific versions, followed by
# a "generic" line for all other versions.
# This is shown below for scsi.device.
# Note the usefulness for these options with the ISNSD
# and VERSIONISNSD options!
#
# Patches with version and revision info always take
# precedence over a general patch line for the same
# deviceif they apply.
# SANA2MAGIC/S Some SANA2 devices don't take it very well if they
# get passed a NULL buffer management pointer on OpenDevice()
# This not only makes it hard for NSD to operate nicely, it
# also confuses some of the popular SANA2 debugging tools.
# If you have a device like this, you may want to try this
# option. It should help by providing a dummy pointer if needed.
# ISNSD/S Will recognize and not patch any device with at least
# the given VERSION and, optionally, REVISION.
# VERSIONISNSD/S Works like ISNSD for the exact VERSION.REVISION.
# This is useful in case somebody put out a non NSD
# device suddenly with a higher version number. Tss.
# What an idea.
# SINGLEPATCHONLY/S
# NSDPatch will patch a device just once on the "first" call
# to OpenDevice(). This option is still accepted, but OBSOLETE,
# as this behaviour is NSDPatch default starting with NSDPatch
# version 43.12.
#
# TRYMULTIPATCH/S
# Normally, NSDPatch will check a device to patch on
# the initial OpenDevice() call and patch it
# appropriately. This behaviour is default starting
# with NSDPatch 43.12. If you encounter a device that
# changes its own device function addresses while it
# is open, you should use this option. This is highly
# unlikely, though, as this behaviour would be rather
# inefficient and possibly crash prone. Note
# that when using this option, you may encounter
# infinite loops if other tools like debuggers
# also patch into the device vectors. Before 43.12,
# this option was the default setting but due to its
# dangerous nature, SINGLEPATCHONLY is now the
# default setting.
# INTBEGINIO/S
# Some devices may be used from within interrupts
# to a certain extent. timer.device and audio.device
# have functionality that may be used from interrupts.
# Specify this option only if a device may be safely
# called from within supervisor code. In supervisor
# mode, NSDPatch functionality is then bypassed to
# preserve system stability. Do not specify this option
# if it is not needed as it will add some amount of
# processing overhead.
#
#
# MAPTODEVICE/K
# MAPTOUNIT/K/N
# By using this type, you can define mappings from one
# device/unit combination to another. This is
# useful if special tools check on the device
# name for certain functionality and you really want
# to use another device/unit. Examples can be found
# below. It is usually unwise to map devices to
# devices of a different type because the command
# sets may well differ in a way that confuse non NSD
# aware applications. Note that mapping trackdisk
# units to other devices may be dangerous unless you
# run any "noclick" hack before NSDPatch!
#
#
# FIXSCSIUPDATE/S
# The V40 scsi.device has a problem with the JAZ-drive
# A CMD_UPDATE will start up the drive even if there is
# nothing to update. For any trackdisk like device
# with HD_SCSICMD, you # can specify this option to
# fix a JAZ-drive. CMD_UPDATE will be replaced then
# with a safe version, which only syncs up the
# drive's caches if the drive is ready.
#
#
# AVOIDFORBID/S
# The AmigaOS kernel Exec single threads any device
# opener with Forbid(), meaning that only the task
# opening the device will run at that time. Some
# devices rely on this, some modern devices don't.
# Forbid() is bad, because opening device can take
# some time, which means that other tasks are blocked
# in a significant and possibly deadly way for time
# critical applications. A better method to do single
# threading is use of a semaphore, which
# unfortunatley can't be generally used due to
# compatibility reasons. If you know that a device
# can handle a semaphore, specify this option. The
# Forbid() will then be automagically converted into
# a semaphore call when the device is opened.
# Special magic is integrated for console.device, which
# tends to Forbid() for a long, long time.
# ONLY TOUCH THIS IF YOU KNOW WHAT YOU ARE DOING!
#
#-------------------------------------------------------------------------
#
# Default configuration lines for the V40 (OS 3.1) devices.
# If you find any bugs or omissions, please report them.
# With some work, all the correct versions could be added,
# and this file could contain complete patch information for
# different OS versions. Feedback on this is welcome.
#
# Add a comment '#' character to those lines where you already
# use a NSD device.
#
# Notes:
#
# - audio.device is marked with IOERRNOCMD. It does not crash on
# unknown commands, but it doesn't set IOERR_NOCMD correctly.
#
# - As a convenience measure for A4000T users, a line with
# 2nd.scsi.device, equal to the scsi.device line, has been added.
#
# - mfm.device V38/V40 trashes a CPU register on OpenDevice() and
# has a special private configuration command. The patch fixes
# the former automagically (as for any device), and the patch
# line reflects the latter.
#
# - scsi.device V40 and before V43.22 will not handle CMD_UPDATE well,
# This is worked around by the FIXSCSIUPDATE option in the respective
# lines.
DEVICE audio.device DEVICETYPE NSDEVTYPE_AUDIO COMMANDS 1-14,32 IOERRNOCMD INTBEGINIO
DEVICE cd.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,18-23,32-46
DEVICE clipboard.device DEVICETYPE NSDEVTYPE_CLIPBOARD COMMANDS 2-4,9-12
DEVICE console.device DEVICETYPE NSDEVTYPE_CONSOLE COMMANDS 1-3,9-12 VERSION 40
DEVICE console.device DEVICETYPE NSDEVTYPE_CONSOLE COMMANDS 1-3,9-12
DEVICE gameport.device DEVICETYPE NSDEVTYPE_GAMEPORT COMMANDS 1,5-13
DEVICE input.device DEVICETYPE NSDEVTYPE_INPUT COMMANDS 1,5-16
DEVICE keyboard.device DEVICETYPE NSDEVTYPE_KEYBOARD COMMANDS 1,5-13
DEVICE parallel.device DEVICETYPE NSDEVTYPE_PARALLEL COMMANDS 1-10
DEVICE printer.device DEVICETYPE NSDEVTYPE_PRINTER COMMANDS 1-12,!2,!4,!5
DEVICE ramdrive.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 2-5,9,11-15
DEVICE scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK VERSION 43 ISNSD FIXSCSIUPDATE
DEVICE scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK VERSION 43 REVISION 22 ISNSD
DEVICE scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28 VERSION 40 REVISION 20 FIXSCSIUPDATE
DEVICE scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28,!22 FIXSCSIUPDATE
DEVICE 2nd.scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK VERSION 43 ISNSD FIXSCSIUPDATE
DEVICE 2nd.scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK VERSION 43 REVISION 22 ISNSD
DEVICE 2nd.scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28 VERSION 40 REVISION 20 FIXSCSIUPDATE
DEVICE 2nd.scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28,!22 FIXSCSIUPDATE
DEVICE serial.device DEVICETYPE NSDEVTYPE_SERIAL COMMANDS 1-11,!4
DEVICE timer.device DEVICETYPE NSDEVTYPE_TIMER COMMANDS 9-11 INTBEGINIO
DEVICE trackdisk.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 2-16,!8,$8002-$8005,$8009-$800b,$8010-$8011
DEVICE mfm.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-23,29
DEVICE a2065.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 SANA2MAGIC
DEVICE a2060.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,17-26 SANA2MAGIC IOERRNOCMD
DEVICE slip.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,9-26
#-------------------------------------------------------------------------
#
# A few configuration lines for known third party stuff. Please report
# more device configurations if you can obtain them!
#
# It is unwise to use a configuration line without checking the version
# of the device first! Not all these entries are necessarily tested.
#
# Entries for devices that are known to be troublesome are enabled as
# default.
#
# Entries for specific known versions precede entries that should cover
# all other versions.
#
# If you create new entries here, please report them to
# <heinz@hwg.muc.de>. Thanks a lot.
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DEVICE amoksana.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 1-5,8-9,16-26 VERSION 3 REVISION 189 SANA2MAGIC
DEVICE amoksana.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 1-5,8-9,16-26 VERSION 3 REVISION 190 SANA2MAGIC
DEVICE amoksana.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 1-5,8-9,16-26 SANA2MAGIC
# VillageTronic Ariadne board.
DEVICE ariadne.device DEVICETYPE NSDEVTYPE_SANA2 VERSION 1 REVISION 47 ISNSD
#DEVICE ariadne.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 VERSION 1 REVISION 39
#DEVICE ariadne.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26
# Interworks ICard
DEVICE icard.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 VERSION 1 REVISION 4 SANA2MAGIC IOERRNOCMD
DEVICE icard.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 SANA2MAGIC IOERRNOCMD
# NE1000 for the GoldenGate board
DEVICE gg_ne1000.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 VERSION 37 REVISION 7 SANA2MAGIC
DEVICE gg_ne1000.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 SANA2MAGIC
# NE2000 for the GoldenGate board
DEVICE gg_ne2000.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 VERSION 37 REVISION 7 SANA2MAGIC
DEVICE gg_ne2000.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-26 SANA2MAGIC
# QuickNet board
DEVICE QuickNetS2.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,17-26,$7ff0 VERSION 2 REVISION 3 SANA2MAGIC IOERRNOCMD
DEVICE QuickNetS2.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,17-26,$7ff0 SANA2MAGIC IOERRNOCMD
DEVICE QuickNet.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8,17,20 SANA2MAGIC
# Holger Kruse
#DEVICE ppp.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,9-11,14-26
# A4066
#DEVICE a4066.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,9-11,14-26 VERSION 1 REVISION 9
# Hydra
DEVICE hydra.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-27 VERSION 1 REVISION 44 SANA2MAGIC
DEVICE hydra.device DEVICETYPE NSDEVTYPE_SANA2 COMMANDS 2-3,8-11,14-27 SANA2MAGIC
# HWG version 40.9
DEVICE a2060.device DEVICETYPE NSDEVTYPE_SANA2 VERSION 40 REVISION 9 ISNSD
# HWG/MBS version 3.x
DEVICE a2065.device DEVICETYPE NSDEVTYPE_SANA2 VERSION 3 ISNSD
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# A few lines donated by Alessandro Zummo
# MultiFace Card
#DEVICE duart.device DEVICETYPE NSDEVTYPE_SERIAL COMMANDS 1-11,!4
#DEVICE pit.device DEVICETYPE NSDEVTYPE_PARALLEL COMMANDS 1-10
# GVP IOExtender or GForce 040 Combo
#DEVICE gvppar.device DEVICETYPE NSDEVTYPE_PARALLEL COMMANDS 1-10
#DEVICE gvpser.device DEVICETYPE NSDEVTYPE_SERIAL COMMANDS 1-11,!4
# diskserial.device
#DEVICE diskserial.device DEVICETYPE NSDEVTYPE_SERIAL COMMANDS 1-11,!4
# a2232.device
#DEVICE a2232.device DEVICETYPE NSDEVTYPE_SERIAL COMMANDS 1-11,!4
# squirrel
#DEVICE squirrelserial.device DEVICETYPE NSDEVTYPE_SERIAL COMMANDS 1-11,!4 VERSION 37 REVISION 565
# telser (Command set not checked!)
#DEVICE telser.device DEVICETYPE NSDEVTYPE_SERIAL COMMANDS 1-11,!4
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# For omniscsi.device 1.9 as used in some Guru-ROM's
# Yes, to patch omniscsi.device, you'll need the name gvpscsi.device!
#DEVICE gvpscsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 2-5,9-15,20-23,28
# For HardFrame Controllers
#DEVICE HardFrame.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,23,28
# Oliver Kastl's atapi.device
#DEVICE atapi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28
# Another recoverable ram disk
#DEVICE statram.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 2-15,20-21 VERSION 37 REVISION 11
# For Hardital Synthesis Controllers
# Looks like this should work with syndisk.device 33.x
#DEVICE syndisk.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 2-5,9,11-15,28,$69,$6d,$70,$73
# A few lines donated by Alessandro Zummo
# Blizzard boards from Phase 5
#DEVICE 2060scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28
#DEVICE 1260scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28
#DEVICE 1230scsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28
# Phase 5 board, donated by Willem Schaaij
#DEVICE cybscsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28
# This should cover SCSI/IDE users with a DataFlyer card.
DEVICE ExpSys.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-9,11-15,18,20-22,28-29 IOERRNOCMD
# WarpEngine
#DEVICE warpdrive.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28 VERSION 40 REVISION 66
# Oktagon 6.10
# Also seems to support 34-36,37-39 but I don't know if
# the implementation is acceptable (cd.device!), so I don't list them
#DEVICE oktagon.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,18-22,28 VERSION 6 REVISION 10
# diskspare
#DEVICE diskspare.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 2-15,18-22 VERSION 3 REVISION 0
# squirrel
#DEVICE squirrelscsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28 VERSION 37 REVISION 1765
# Draco builtin hostadapter (Donated by Bernhard Möllemann)
#DEVICE dracoscsi.device DEVICETYPE NSDEVTYPE_TRACKDISK COMMANDS 1-15,20-23,28
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# AsimCDFS
#DEVICE asimcdfs.device DEVICETYPE NSDDEVTYPE_UNKNOWN COMMANDS 0-37
#-------------------------------------------------------------------------
#
# Some broken software checks the device name and assumes certain
# capabilities. This prohibits the use of updated drivers because
# the software would not use their features.
# Via device mapping, you can map a certain device unit combination
# to another.
#
# Fool CrossDOS into using TD_GETGEOMETRY for fake units
#DEVICE mfm.device UNIT 1 MAPTODEVICE hwgatapi.device MAPTOUNIT 1
#DEVICE mfm.device UNIT 1 MAPTODEVICE scsi.device MAPTOUNIT 1
# Same thing for versions of FFS.
# Note that mapping trackdisk units to other devices may be dangerous
# unless you run any noclick hack before NSDPatch!
#DEVICE trackdisk.device UNIT 1 MAPTODEVICE hwgatapi.device MAPTOUNIT 1
#DEVICE trackdisk.device UNIT 1 MAPTODEVICE scsi.device MAPTOUNIT 1
#-------------------------------------------------------------------------
#
# Demonstration lines for activation and late mount functionality.
# If you want to late mount huge partitions, place the late mount lines
# after the device patch line. Note that you must not specify a colon
# for the DOS names.
#
# Activate a mounted DOS device entry named "HUGE" (without the colon!)
#ACTIVATE HUGE
# Late-Mount and activate a partition named "BIG" on scsi.device unit 4
#DEVICE scsi.device RDBUNIT 4 ACTIVATE BIG
# Late-Mount all unmounted partitions on scsi.device unit 4
#DEVICE scsi.device RDBUNIT 4 ACTIVATE #?
# Late-Mount all unmounted partitions except for UNIX and MAC on scsi.device unit 4
#DEVICE scsi.device RDBUNIT 4 ACTIVATE ~(UNIX|MAC)
#-------------------------------------------------------------------------
### EOT ###